#pragma once

#include "oj_model.hpp"
#include <ctemplate/template.h>

namespace view_ns
{
    using namespace model_ns;

    // 题目所在路径
    const std::string template_path = "./template_html/";

    class View
    {
    public:
        View()
        {}
        ~View()
        {}

        // 获取所有题目信息，构建所有题目的网页
        void AllExpandHtml(const std::vector<Questions> &questions, std::string *html)
        {
            // 题目(编号 标题 难度)  使用表格
            // 形成路径
            std::string src_path = template_path + "all_questions.html";

            // 形成数据字典 
            ctemplate::TemplateDictionary root("all_questions");
            for(auto &q : questions) 
            {
                // 循环
                ctemplate::TemplateDictionary *sub = root.AddSectionDictionary("question_list");
                sub->SetValue("number", q.number);
                sub->SetValue("title", q.title);
                sub->SetValue("star", q.star);
            }

            // 获取被渲染的对象
            ctemplate::Template *tpl = ctemplate::Template::GetTemplate(src_path, ctemplate::DO_NOT_STRIP);

            // 完成渲染功能
            tpl->Expand(html, &root);
        }

        // 获取指定题目信息，构建指定题目的网页
        void OneExpandHtml(const Questions &q, std::string *html)
        {
            // 形成路径
            std::string src_path = template_path + "one_question.html";

            // 形成数据字典 
            ctemplate::TemplateDictionary root("one_question");
            root.SetValue("number", q.number);
            root.SetValue("title", q.title);
            root.SetValue("star", q.star);
            root.SetValue("desc", q.desc);
            root.SetValue("pre_code", q.header);

            // 获取被渲染的对象
            ctemplate::Template *tpl = ctemplate::Template::GetTemplate(src_path, ctemplate::DO_NOT_STRIP);

            // 完成渲染功能
            tpl->Expand(html, &root);
        }
    };
}